PythonとType Hintsで書くバックエンド
type hints アンチパターン
熱烈なNotebookユーザーの方がやってしまいがちなことの一つにとにかくprimitiveな型で済ませようとしてしまう
Tuple[str, List[Tuple[str, str, int, bool]]]
Tuple[str, List[Dict[str, Union[str, int, bool]]]]
可読性は多少上がったかもしれませんがこのような辞書を使用してもせっかくのtype hintsの意味がありません。
type hintsがなされていても適切なデータクラスが定義されていない場合、読みにくくtype hintsによる安全性などの恩恵を十分に受けることができません。
type hints と dataclass
typing.NamedTupleを継承することでコンテナの中身の型を明示しながらnamedtupleを定義する
TODO ドキュメント確認
Tuple[str, List(Item)]
dataclassは継承によって両方のfieldを持たせることができる、dataclassはタプルではないため偶然同じ値を持つタプルと比較されない、namedtupleとは異なり__dict__を持つなどです(__slots__を定義すれば持たないようにも出来ますが)。
Orderクラス
似たような機能を提供するライブラリにattrsがあり、こちらはdataclassに加えて他の機能も持つ代わりに、dataclassのほうがシンプルです。
Notebookでは例えば実験の記録を全てdictに突っ込んで使用したりすることがあると思いますが、本番で動くようなコードではしっかりとデータ構造を定義することでtype hintsを活かし、安全性と可読性を上げ、コーディングを快適にすることが出来ます。
Enums
パラメータとenvvar
sklearn.ensemble.RandomForestClassifierのコンストラクタ
引数が並ぶ
transformers.BertModelのコンストラクタ
BertConfig型を受け取る